<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1><a href="https://www.runoob.com/css3/css3-flexbox.html">具体细节，看菜鸟教程</a></h1>
    <div class="container">
        <div class="item item1">1</div>
        <div class="item item2">2</div>
        <div class="item item3">3</div>
        <div class="item item4">4</div>
        <!-- <div class="item item5">5</div> -->
        <!-- <div class="item item6">6</div> -->
    </div>

</body>

</html>

<style>
    .container {
        display: flex;
        width: 400px;
        height: 250px;
        border: 1px solid rosybrown;
        /* 容器里子元素竖向排列，就是按照 y 轴从上到下排列 */
        /* flex-direction: column; */
        /* 容器里子元素竖向排列，就是按照 y 轴从下到上排列 */
        /* flex-direction: column-reverse; */
        /* 容器里子元素横向排列，就是按照 x 轴从左到右排列 */
        flex-direction: row;
        /* 容器里子元素横向排列，就是按照 x 轴从右到左排列 */
        /* flex-direction: row-reverse; */

        /* 内容对齐（justify-content）属性应用在弹性容器上，把弹性项沿着弹性容器的主轴线（main axis）对齐。就是看是纵向还是横向排列，然后沿着这个x轴，y轴排列 */
        /* 弹性项目居中紧挨着填充。（如果剩余的自由空间是负的，则弹性项目将在两个方向上同时溢出） */
        /* justify-content: center; */
        /* 弹性项目向行头紧挨着填充。这个是默认值。第一个弹性项的main-start外边距边线被放置在该行的main-start边线，而后续弹性项依次平齐摆放 */
        /* justify-content: flex-start; */
        /* 弹性项目向行尾紧挨着填充。第一个弹性项的main-end外边距边线被放置在该行的main-end边线，而后续弹性项依次平齐摆放。 */
        /* justify-content: flex-end; */
        /* 弹性项目平均分布在该行上。如果剩余空间为负或者只有一个弹性项，则该值等同于flex-start。否则，第1个弹性项的外边距和行的main-start边线对齐，而最后1个弹性项的外边距和行的main-end边线对齐，然后剩余的弹性项分布在该行上，相邻项目的间隔相等 */
        /* justify-content: space-between; */
        /* 弹性项目平均分布在该行上，两边留有一半的间隔空间。如果剩余空间为负或者只有一个弹性项，则该值等同于center。否则，弹性项目沿该行分布，且彼此间隔相等（比如是20px），同时首尾两边和弹性容器之间留有一半的间隔（1/2*20px=10px） */
        justify-content: space-around;

        /* align-items 设置或检索弹性盒子元素在侧轴（纵轴）方向上的对齐方式。 */
        /* 弹性盒子元素在该行的侧轴（纵轴）上居中放置。（如果该行的尺寸小于弹性盒子元素的尺寸，则会向两个方向溢出相同的长度）。 */
        align-items: center;
        /* 弹性盒子元素的侧轴（纵轴）起始位置的边界紧靠住该行的侧轴起始边界。 */
        /* align-items: flex-start; */
        /* 弹性盒子元素的侧轴（纵轴）起始位置的边界紧靠住该行的侧轴结束边界。 */
        /* align-items: flex-end; */
        /* 如弹性盒子元素的行内轴与侧轴为同一条，则该值与'flex-start'等效。其它情况下，该值将参与基线对齐 */
        /* align-items: baseline; */
        /* 如果指定侧轴大小的属性值为'auto'，则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸，但同时会遵照'min/max-width/height'属性的限制。 */
        /* align-items: stretch; */

        /* flex-wrap 属性用于指定弹性盒子的子元素换行方式。 */
        /* 弹性容器为多行。该情况下弹性子项溢出的部分会被放置到新行，子项内部会发生断行 */
        flex-wrap: wrap;
        /* 默认， 弹性容器为单行。该情况下弹性子项可能会溢出容器。 */
        /* flex-wrap: nowrap; */
        /* 反转 wrap 排列。 */
        /* flex-wrap: wrap-reverse; */

        /* align-content 属性用于修改 flex-wrap 属性的行为。类似于 align-items, 但它不是设置弹性子元素的对齐，而是设置各个行的对齐。 */
        /* 各行向弹性盒容器的起始位置堆叠。 */
        /* align-content: flex-start ; */
        /* 各行向弹性盒容器的结束位置堆叠。 */
        /* align-content: flex-end ; */
        /* -各行向弹性盒容器的中间位置堆叠。 - */
        /* align-content: center ; */
        /* 各行在弹性盒容器中平均分布。 */
        /* align-content: space-around ; */
        /* 各行在弹性盒容器中平均分布，两端保留子元素与子元素之间间距大小的一半 */
        align-content: space-between;


        /* align-self 属性用于设置弹性元素自身在侧轴（纵轴）方向上的对齐方式。 */

    }

    .item {
        width: 100px;
        height: 100px;
        background-color: cornflowerblue;
    }

    .item1 {
        /* 如果'align-self'的值为'auto'，则其计算值为元素的父元素的'align-items'值，如果其没有父元素，则计算值为'stretch'。 */
        align-self: auto;
    }

    .item2 {
        /* 弹性盒子元素的侧轴（纵轴）起始位置的边界紧靠住该行的侧轴起始边界。 */
        align-self: flex-start;
    }

    .item3 {
        /* 弹性盒子元素的侧轴（纵轴）起始位置的边界紧靠住该行的侧轴结束边界。 */
        align-self: flex-end;
    }

    .item4 {
        /* 弹性盒子元素在该行的侧轴（纵轴）上居中放置。（如果该行的尺寸小于弹性盒子元素的尺寸，则会向两个方向溢出相同的长度）。 */
        align-self: center;
    }
</style>